gusucode.com > 《MATLAB图像与视频处理实用案例详解》代码 > 《MATLAB图像与视频处理实用案例详解》代码/第 19 章 基于语音识别的信号灯图像模拟控制技术/voicebox/readau.m

    function [y,fs,h]=readau(filename,mode)
%READAU  Read a SUN .AU format sound file [Y,FS,H]=(FILENAME)
%
% Inputs:
%           filename : character string containing filename (default extension .au)
%           mode:    't' = trim leading and trailing silences
%                    'h' = read header only
%             'd'    Look in data directory: voicebox('dir_data')
%
% Outputs:
%           y  : matrix containing one channel per column
%           fs : sample frequency
%           h  : parameter array:
%                h(1) = header length (bytes)
%                h(2) = data length (bytes)
%                h(3) = data format (see below)
%                h(4) = sample rate (Hz)
%                h(5) = number of channels

%	   Copyright (C) Mike Brookes 2008
%      Version: $Id: readau.m,v 1.1 2008/03/27 18:52:41 dmb Exp $
%
%   VOICEBOX is a MATLAB toolbox for speech processing.
%   Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   This program is free software; you can redistribute it and/or modify
%   it under the terms of the GNU General Public License as published by
%   the Free Software Foundation; either version 2 of the License, or
%   (at your option) any later version.
%
%   This program is distributed in the hope that it will be useful,
%   but WITHOUT ANY WARRANTY; without even the implied warranty of
%   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%   GNU General Public License for more details.
%
%   You can obtain a copy of the GNU General Public License from
%   http://www.gnu.org/copyleft/gpl.html or by writing to
%   Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


if nargin<2,  mode='0'; end
if any(mode=='d')
    filename=fullfile(voicebox('dir_data'),filename);
end
fid=fopen(filename,'rb','b');       % big endian
if fid == -1
    fn=[filename,'.au'];
    fid=fopen(fn,'rb','l');
    if fid ~= -1, filename=fn; end
end
if fid == -1, error('Can''t open %s for input',filename); end
[hdr,n]=fread(fid,6,'int');
if n ~= 6 || hdr(1)~=779316836, error('Can''t read header from AU file %s',filename); end

if any(mode =='h')
    y=hdr(2:6);
else
    if nargout>1
        fs=hdr(5);
        if nargout>2
            h=hdr(2:6);
        end
    end
    fseek(fid,hdr(2),-1);
    switch hdr(4)
        case 1
                        y=fread(fid,inf,'uchar');
                        y=pcmu2lin(y);
                case 2
            y=fread(fid,inf,'schar');
        case 3
            y=fread(fid,inf,'short');
        otherwise
            error('Unsupported format type %d in AU file %s',hdr(4),filename);
    end
    nsamp=length(y);
    msamp=floor(nsamp/hdr(6));
    y=reshape(y,hdr(6),msamp)';
end
fclose(fid);